Nowadays business processes of most companies are supported to a great extent by a wide array of software applications.
Since business processes are subjected to a constant evolution to adapt to new business requirements, the components of the software systems and applications that support the companies' business processes must frequently be changed and must dynamically evolve to implement the new requirements.
In this changing, dynamic environment, software delivery processes play a key role, not only in the software applications development area, but also in many different areas, activities and business processes of any company.
As a result, software delivery management has evolved as a software engineering discipline, within the enterprise systems management, that is focused on controlling the evolution of software and the implementation of changes to software systems.
The main objectives of the software delivery management are to enable the correct installation in different environments (such as the testing, training, production environments) of new software applications, as well as the control of changes or fixes to be applied to software applications already installed. In fact, software delivery enables deployment of (i.e., install and run) new releases or versions of the software applications, distribution and installation of fixes and patches to overcome bugs or problems encountered in existing applications, and alteration of the configuration of the software systems from one centralized point of administration. Software delivery also enables reinstallation and reconfiguration of systems after a system crash without requiring a site visit.
In practice, software delivery is a complex, delicate, and time consuming task that can range from distributing a single file to replacing an entire software system.
In proportion to the extent of change applied to a software system, the likelihood increases of an error during installation or an incompatibility with already-installed software. Since software delivery allows application of changes to a large number of systems at the same time, it is very important that these changes do not impact negatively on these systems; otherwise, they could lead to a massive user interruption or even a loss of business.
Generally speaking, the process of delivering software involves several actions. These actions include, for example, identifying the various components (e.g., source code modules, binary and executable files, configuration files, interfaces, data models, data structures, entities, procedures such as installation and configuration scripts, documents such as user guides, and the like) of the software product to be delivered; managing the different releases or versions of the components of the software product; identifying dependencies among the elements that compose the software system to which the software product is to be delivered; generating the items required to run the software product in the target system, i.e. in the target environment and platform; creating software packages containing the files, data, scripts, and utilities needed to install the software product in the target platform; distributing the software packages to the target system; and installing the distributed software packages in the target system.
Several different methods have been proposed for implementing certain parts or sub-processes of the complete delivery process outlined above. Some examples of the known methods are reported herein below.
U.S. Pat. No. 5,742,829, by Davis et al., entitled “Automatic software installation on heterogeneous networked client computer systems”, provides a method for automatically installing software on heterogeneous client computer systems.
U.S. Pat. No. 5,845,090, by Collins, III et al., entitled “System for software distribution in a digital computer network”, discloses a process of distributing software and data in a network by combining software and data, together with programs and data, known as methods, into single entities referred to as Packages, and then, by using specific techniques, transmits Packages from one computer to another. The process disclosed in this document covers the sub-processes for the transmission of distribution packages (programs and data installation), collection packages (methods for collecting data), and command packages (methods for system administration tasks).
U.S. Pat. No. 5,805,897, by Glowny, entitled “System and method for remote software configuration and distribution”, deals with a system and method for remote software installation and maintenance.
U.S. Pat. No. 6,192,518, by Neal, entitled “Method for distributing software over network links via electronic mail”, discloses a method, apparatus, and an article of manufacture for distributing a software applications through a network via electronic mail.
U.S. Pat. No. 6,226,784, by Holmes, entitled “Reliable and repeatable process for specifying, developing, distributing and monitoring a software system in a dynamic environment”, describes a general process for project management purposes. The process is limited to managing the software life cycle just during the development thereof in a laboratory environment.
The above-named United States patents are incorporated in their entireties herein by reference.
As another example of the systems and methods that have been described in the prior art, the publication entitled “The Software Distribution Process”, by the International Technical Support Organization, IBM Corporation, SG24.5504.00, September, 1999, describes the software distribution and installation sub-processes. Every step is described in detail, explaining how and when it is implemented. However, any other sub-processes involved in the software delivery process as a whole remain uncovered.
Most of the known methods are limited to cover only particular sub-processes of the complete software delivery process, such as the distribution sub-process and/or the unattended installation sub-processes. Other known methods are limited to covering specific needs of the software project management, and are not applicable to implement the software delivery process on business environments along the whole life cycle of the software product, from development to production.
As a practical implementation of the prior art systems and methods, information technology (IT) organizations of most companies have been installing a variety of separate, heterogeneous, isolated sub-systems to implement specific sub-processes of the whole software delivery process. For instance, a specific configuration management system (or application) might be used for controlling different versions of code; an unrelated system (or application) used for managing changes, another system for tracking problems in the software products and their solutions, and yet another separate tool for distributing software products to the different environments.
The lack of a proper end-to-end software delivery process, or the implementation of the process by means of isolated, stand-alone systems, frequently gives rise to the generation of poor quality software products, to delays in delivery plans, to cost overruns, or to the inability to meet customer demands.
The Applicant has observed that present methods are unable to encompass the nature of the changes to the different components of software applications, the dependencies and relationships between them, the multiple platforms on which they run, their multiple versions and their evolution through the different environments (such as development, building, unit tests, functional tests, integration tests, regression tests, system tests and production. Thus, there is a need for an end-to-end software delivery process able to manage the software system along its whole life cycle, from development to installation in production.
To address this need successfully, the various actions making up the complete end-to-end software delivery process should be neither independent nor isolated from each other. To the contrary, most if not all of them should be interrelated. In fact, these actions should be chained, since each action generates an output required by another action. Also, the end-to-end software delivery process should cover the complete life cycle of a new software product, e.g. a new application, managing it as a whole, and preserving the integrity thereof throughout the process. Furthermore, the software delivery process must take into account that software products are composed of different but interrelated parts, that are also related to other components and software products running on the same or on other target systems.
Thus, there remains a need for a global solution covering all the requirements given above, and for an end-to-end software delivery process based on an integrated management system that covers the complete life cycle of a software product, managing it as a whole and preserving its integrity, while taking into account that the software products are composed of different interrelated parts.